package com.sc.nft.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sc.nft.dto.SaasTaskAddDTO;
import com.sc.nft.entity.SaasTask;
import com.sc.nft.entity.SaasUserTask;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.*;
import com.sc.nft.entity.vo.*;
import com.sc.nft.sup.PageRequest;

import java.util.List;
import java.util.Map;

/**
 * 任务基础表(SaasTask)表服务接口
 *
 * @author 王伟成
 * @since 2024-01-11 15:07:57
 */
public interface SaasTaskService {

    /**
     * 启动or关闭
     *
     * @param saasTaskStartOrEndDTO
     */
    void startOrEnd(SaasTaskStartOrEndDTO saasTaskStartOrEndDTO);

    /**
     * 任务类型枚举转换map
     *
     * @return
     */
    Map taskType();

    /**
     * 任务基础分页
     *
     * @param saasTaskBasicsDTO
     * @return
     */
    IPage<SaasTaskBasicsVO> pageBasics(SaasTaskBasicsDTO saasTaskBasicsDTO);

    /**
     * 根据任务id获取任务详情
     *
     * @param id
     * @return
     */
    SaasTaskDetailsVO getByIdDetails(Long id);
    /**
     * 用户saas任务前端分页获取数据
     *
     * @param saasTaskWebPageDTO
     * @param user
     * @return
     */
    IPage<SaasTaskWebPageVO> saasTaskWebPage(SaasTaskWebPageDTO saasTaskWebPageDTO, UserInfo user);
    /**
     * 根据任务id获取当前任务的详情信息,客户端使用
     *
     * @param id
     * @param user
     * @return
     */
    SaasTaskWebDetailsVO saasTaskById(Long id, UserInfo user);
    /**
     * 用户参与的任务
     *
     * @param saasUserTaskParticipatingTaskDTO
     * @param user
     * @return
     */
    IPage<SaasUserTaskParticipatingTaskVO> userParticipatingTask(SaasUserTaskParticipatingTaskDTO saasUserTaskParticipatingTaskDTO, UserInfo user);
    /**
     * @param saasUserTaskParticipatingTaskDTO
     * @param user
     * @return
     */
    IPage<SaasUserWaitingToBeClaimedTaskVO> userWaitingToBeClaimedTask(SaasUserWaitingToBeClaimedTaskDTO saasUserTaskParticipatingTaskDTO, UserInfo user);
    /**
     * 根据用户任务完成获取奖励
     *
     * @param id
     * @return
     */
    List<SaasUserTaskIdGainAwardVO> getByUserTaskIdGainAward(Long id);
    /**
     * 领取奖励
     *
     * @param id
     * @param user
     */
    void receiveAward(Long id, UserInfo user);
    List<SaasTaskBuyVO> taskTemplateIsTooLongProcedure(Long id);


    /**
     * 任务模板mq消费
     *
     * @param saasTaskBurialPointDTO
     */
    void templateAnalysis(SaasTaskBurialPointDTO saasTaskBurialPointDTO);
    SaasTaskWebDetailsVO saasTaskByIdCompleted(Long id, UserInfo user);

    /**
     * 获取每日重置数据
     *
     * @return
     */
    List<SaasTask> everydayTask();
    /**
     * 获取每周一重置数据
     *
     * @return
     */
    List<SaasTask> weeklyTask();

    /**
     * 重置任务
     *
     * @param saasTask
     */
    void resetTask(SaasTask saasTask);

    /**
     * 新增基础任务
     *
     * @param saasTaskAddDTO
     */
    void add(SaasTaskAddDTO saasTaskAddDTO);

    /**
     * 获取星球任务列表
     * @param pageRequest
     * @return
     */
    IPage<SaasTaskWebPageVO> saasTaskStarWebPage(PageRequest pageRequest);
    /**
     * 修改星球任务
     * @param saasTaskModificationStarDTO
     */
    void modificationStar(SaasTaskModificationStarDTO saasTaskModificationStarDTO);

    /**
     * 星球任务基础列表
     * @param saasTaskBasicsDTO
     * @return
     */
    IPage<SaasTaskBasicsVO> pageStar(SaasTaskBasicsDTO saasTaskBasicsDTO);

    /**
     * 提交审核
     *
     * @param id
     */
    void submitAudit(Long id);
    /**
     * 撤销审核
     * @param id
     */
    void revocation(Long id);


    /**
     * 获取所有未领取任务的奖励id
     * @return
     */
    List<Long>getAllSaasUnclaimedTaskAwardId();

    /**
     * 发放saasTask任务的奖励
     * @param list
     */
    void addSaasTaskDrawPrize(List<SaasUserTask> list);
}
